package io;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 IO:Input和Output,即输入与输出
 Java将输入和输出用"流Stream"表达,分为输入流和输出流
 我们可以将他们想象为连接我们的程序和另一个设备之间的管道,通过他们可以读写设备
 Java将输入流和输出定义了两个对应的超类InputStream和OutputStream:
 1)InputStream:输入流,方向是从外界到程序的方向,用于读取数据的流,是一个抽象类,定义了读取字节的相关方法
 2)OutputStream:输出流,方向是从程序到外界的方向,用于写出数据的流,是一个抽象类,定义了写出字节的相关方法
 文件流:FileInputStream和FileOutputStream
 文件流继承自InputStream和OutputStream,用于对文件进行读写操作
 */
public class FOSDemo {
    public static void main(String[] args) throws IOException {
        /*
        文件输出流两个常用的构造器:
        1)FileOutputStream(String fileName)
        2)FileOutputStream(File file)
        文件流创建时若果指定的文件不存在则会自动创建,前提是该文件所在的目录必须存在,若不存在则发出异常
         */

        //定义了一个文件输出流
        File file = new File("fos.dat");
        FileOutputStream fos = new FileOutputStream(file);
//        FileOutputStream fos = new FileOutputStream("fos.dat");
        /*
        void write(int d):
        通过该输出流向目标位置写出一个字节,写出的是给定的int值对应的二进制的"低八位"
        当write(1);时,向fos.dat中写入了一个字节
        int值得二进制样子:00000000 00000000 00000000 00000001
                                                   ^^^^^^^^
                                                   写入该字节
        write()后,fos.dat文件内容为一个字节:
        00000001
        当write(2);时,又向fos.dat中写入了一个字节
        int值得二进制样子:00000000 00000000 00000000 00000010
                                                   ^^^^^^^^
                                                   写入该字节
        write()后,fos.dat文件内容为两个字节:
        00000010

        当fos.write(-1)后,fos中写入了一个字节
        int值得二进制样子:11111111 11111111 11111111 11111111
                                                   ^^^^^^^^
                                                   写入该字节
        write()后,fos.dat文件内容为两个字节:
        11111111
         */
        //向fos.dat中写入了一个字节
        fos.write(256);
        //向fos.dat中又写入了一个字节
        //fos.write(2);
        System.out.println("写出完毕!");
        fos.close();//关闭流

    }
}
